package com.emerquim.bean.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

/**
 * Clase para traer la informacion de los correos para el manejador de alertas
 * @author Felipe Criales
 */
public class ManejadorAlertasDAO {
	
	/**
	 * Funcionalidad de log
	 */
	private static final Logger log = Logger.getLogger(ManejadorAlertasDAO.class);

	// ---------------------------------------------
	// Constantes
	// ---------------------------------------------
	/**
	 * La constante para el sql los correos de los administradores
	 */
	public final static String SQL_CORREOS_ADMIN = "SELECT U.CORREO AS CORREO FROM USUARIOS U, PERMISOS_USUARIO P WHERE U.ID_USUARIO = P.ID_USUARIO AND P.PERMISO = 'ROLE_ADMIN' AND U.ENABLED = 1";
	
	/**
	 * La constate para el sql del correo del medico
	 */
	public final static String SQL_CORREO_MEDICO = "SELECT U.CORREO AS CORREO FROM MEDICOS_USUARIOS M, USUARIOS U WHERE M.ID_USUARIO = U.ID_USUARIO AND U.ENABLED = 1 AND M.TDO_ID = ? AND M.MED_ID = ?";
			
	/**
	 * Metodo que retorna la lista de los correos de los admniistradores
	 * @author Felipe Criales
	 */
	public String[] getCorreosAdministradores() {
		Connection conexion = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		try {
			conexion = ConexionJDBC.getSingleton().getConnection();		
			preparedStatement = conexion.prepareStatement(SQL_CORREOS_ADMIN);
			resultSet = preparedStatement.executeQuery();
			List<String> listaCorreos = new ArrayList<String>();
			while (resultSet.next()) {				
				listaCorreos.add(resultSet.getString("CORREO"));
			}			
			String[] correos = new String[listaCorreos.size()];
			for (int i = 0; i < listaCorreos.size(); i++) {
				correos[i] = listaCorreos.get(i);
			}
			return correos;
		} catch (Exception e) {
			log.error("Error al listar los correos de los administradores: " + SQL_CORREOS_ADMIN);
			e.printStackTrace();
		}
		finally {
			ConexionJDBC.close(resultSet);
			ConexionJDBC.close(preparedStatement);	
			ConexionJDBC.close(conexion);
		}		
        return null;
    }
	
	/**
	 * Metodo que retorna el correo de un medico de la base de datos dado el tipo de documento y el identificador del medico
	 * @author Felipe Criales
	 */
	public String getCorreoMedico(int tipoDocumento, int idMedico){
		Connection conexion = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		try {
			conexion = ConexionJDBC.getSingleton().getConnection();		
			preparedStatement = conexion.prepareStatement(SQL_CORREO_MEDICO);
			preparedStatement.setInt(1, tipoDocumento);
			preparedStatement.setInt(2, idMedico);
			resultSet = preparedStatement.executeQuery();
			while (resultSet.next()) {	
				return resultSet.getString("CORREO");
			}	
		} catch (Exception e) {
			log.error("Error al traer el correo de un medico: " + SQL_CORREO_MEDICO);
			e.printStackTrace();
		}
		finally {
			ConexionJDBC.close(resultSet);
			ConexionJDBC.close(preparedStatement);	
			ConexionJDBC.close(conexion);
		}		
        return null;
    }
}
